// This file is part of OpenMeca, an easy software to do mechanical simulation.
//
// Author(s)    :  - Damien ANDRE  <openmeca@gmail.com>
//
// Copyright (C) 2012 Damien ANDRE
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.


#ifndef OpenMeca_Core_Action_hpp
#define OpenMeca_Core_Action_hpp

#include <QAction>


#include "OpenMeca/Gui/MainWindow.hpp"

namespace OpenMeca
{
  namespace Core
  {

    class Action : public QAction
    {
      Q_OBJECT
    public:    
      Action(const QIcon&, const QString&);
      virtual ~Action();
		       
    protected slots:
      void ActionRequired();

    protected:
      virtual void DoAction() = 0;

    private:
      Action();                               //Not Allowed
      Action(const Action&);              //Not Allowed    
      Action& operator=(const Action&); //Not Allowed
      
    };
    
    
    inline 
    Action::Action(const QIcon & icon, const QString & text)
      :QAction(icon, text, &Gui::MainWindow::Get())
    {
      QAction::setIconVisibleInMenu(true);
      QObject::connect(this, SIGNAL(triggered()), this, SLOT(ActionRequired()));
    }

    inline 
    Action::~Action()
    {
    }

    inline void
    Action::ActionRequired()
    {
      DoAction();
    }
    


  }
}


#endif
